package databasehandling;

import databasehandling.DatabaseHandler;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.Leverandør;
import model.Vare;
import model.VareGruppe;

public class VareHandler {

    public ArrayList<Vare> getVareVedVaregruppeNR(int varegruppeNr) throws SQLException {
        ResultSet rs;
        ArrayList<Vare> vareList = new ArrayList<>();
        if (varegruppeNr == 0) {
            rs = DatabaseHandler.getInstance().select("CALL `HentAlleVarer`()");
        } else {
            rs = DatabaseHandler.getInstance().select("CALL `HentVarerVedVaregruppeNr`(" + varegruppeNr + ")");
        }

        while (rs.next()) {
            Leverandør leverandør = new Leverandør(rs.getInt("LeverandørID"), rs.getString("Firmanavn"), rs.getString("Kontaktperson"), rs.getString("TlfNr"), rs.getString("Adresse"));
            VareGruppe varegruppe = new VareGruppe(rs.getInt("VaregruppeNr"), rs.getString("Navn"));
            Vare vare = new Vare(rs.getInt("Varenummer"),
                    rs.getString("Varenavn"),
                    rs.getInt("Indkøbspris"),
                    rs.getInt("UdsalgsprisDK"),
                    rs.getInt("UdsalgsprisEURO"),
                    rs.getInt("Rabat"),
                    rs.getInt("Antal"),
                    varegruppe,
                    leverandør);

            vareList.add(vare);
        }
        return vareList;
    }

    public ArrayList<Vare> getVarerUdfraSøgning(String searchString) throws SQLException {
        ArrayList<Vare> lagerReturnList = new ArrayList<>();
        ResultSet rs = DatabaseHandler.getInstance().select("CALL `HentAlleVarer`()");

        while (rs.next()) {
            Leverandør leverandør = new Leverandør(rs.getInt("LeverandørID"), rs.getString("Firmanavn"), rs.getString("Kontaktperson"),
                    rs.getString("TlfNr"), rs.getString("Adresse"));

            VareGruppe varegruppe = new VareGruppe(rs.getInt("VaregruppeNr"), rs.getString("Navn"));

            Vare vare = new Vare(rs.getInt("Varenummer"),
                    rs.getString("Varenavn"),
                    rs.getInt("Indkøbspris"),
                    rs.getInt("UdsalgsprisDK"),
                    rs.getInt("UdsalgsprisEURO"),
                    rs.getInt("Rabat"),
                    rs.getInt("Antal"),
                    varegruppe,
                    leverandør);
            if (vare.toSearchString().toLowerCase().contains(searchString.toLowerCase())) { // Hvad søger vi på, på varen?  
                System.out.println(vare.toSearchString());
                lagerReturnList.add(vare);

            }
        }
        return lagerReturnList;
    }

    public ArrayList<Vare> hentAlleVarer() throws SQLException {
        ArrayList<Vare> varelist = new ArrayList<>();
        ResultSet rs = DatabaseHandler.getInstance().select("CALL `HentAlleVarer`()");
        while (rs.next()) {
            varelist.add(new Vare(rs.getInt("Varenummer"), rs.getString("Varenavn"), rs.getInt("Indkøbspris"), rs.getInt("UdsalgsprisDK"), rs.getInt("UdsalgsprisEURO"), rs.getInt("Rabat"), rs.getInt("Antal"), new VareGruppe(rs.getInt("VaregruppeNr"), ("Navn")),
                    new Leverandør(rs.getInt("LeverandørID"), rs.getString("Firmanavn"), rs.getString("Kontaktperson"), rs.getString("TlfNr"), rs.getString("Adresse"))));
        }
        return varelist;
    }

    public Vare hentVareVedVarenummer(String vareNummer) throws SQLException {
        Vare enVare = null;
        if (vareNummer.matches("\\d+")) {
            int vareNummerInt = Integer.parseInt(vareNummer);
            ResultSet rs = DatabaseHandler.getInstance().select("CALL HentVareVedVarenummer(" + vareNummerInt + ")");
            if (rs.next()) {
                enVare = new Vare(rs.getInt("Varenummer"), rs.getString("Varenavn"), rs.getInt("Indkøbspris"), rs.getInt("UdsalgsprisDK"), rs.getInt("UdsalgsprisEURO"), rs.getInt("Rabat"), rs.getInt("Antal"), new VareGruppe(rs.getInt("VaregruppeNr"), ("Navn")),
                        new Leverandør(rs.getInt("LeverandørID"), rs.getString("Firmanavn"), rs.getString("Kontaktperson"), rs.getString("TlfNr"), rs.getString("Adresse")));
            }
        } else {
            System.err.println("Varenummer stemmer ikke helt");
        }
        return enVare;
    }

    public ArrayList<VareGruppe> getAlleVaregrupper() throws SQLException {
        ResultSet rs = DatabaseHandler.getInstance().select("CALL `HentAlleVaregrupper`()");
        ArrayList <VareGruppe> varegruppeList = new ArrayList<>();
        while (rs.next()) {
            VareGruppe vareGruppe = new VareGruppe(rs.getInt("ID"), rs.getString("Navn"));
            varegruppeList.add(vareGruppe);
        }
        return varegruppeList;
    }
}
